import 'dart:convert';
import 'dart:io';

void main() {
  //testCreateFile();
  //writeFileWithOpenWrite();
  readFile();
}

//由于IO速度慢，所以一般使用异步
void testCreateFile() async {
  const filePath = "d://dart.txt";
  var file = File(filePath);
  try {
    //可以使用同步的方法，但是这种方法一般很少用，常用async方法
    //file.existsSync()
    bool exists = await file.exists();
    if (!exists) {
      await file.create();
    }
    //写文件
    await file.writeAsString('hello');
    List<int> arrays = [1, 2, 3];
    await file.writeAsBytes(arrays);
  } catch (e) {
    print(e);
  }
}

//使用openWrite写文件
void writeFileWithOpenWrite() async {
  const filePath = "d://text.txt";
  IOSink ioSink;
  var file = File(filePath);
  try {
    bool exists = await file.exists();
    if (!exists) {
      file.create();
    }
    // 以追加方式写文件
    ioSink = file.openWrite(mode: FileMode.append);
    //接收一个obj，调用obj的toString写入文件
    ioSink.write('hello');
    await ioSink.flush();
  } catch (e) {
    print(e);
  } finally {
    ioSink.close();
  }
}

//读文件
void readFile() async {
  const filePath = "d://dart.txt";
  var file = File(filePath);
  //dart设计之初为web，int占8个字节，此处效率明显低
  Stream<List<int>> stream = file.openRead();
  var lines = stream
      //内容使用utf8解码
      .transform(utf8.decoder)
      //每次返回一行
      .transform(LineSplitter());
  await for (var line in lines) {
    print(line);
  }
}
